home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / Unicode.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  14KB  |  355 lines

  1. /*
  2.      File:        Unicode.h
  3.  
  4.      Contains:    Unicode Interfaces.
  5.  
  6.      Version:    Technology:    System 7.1 through System 8
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __UNICODE__
  19. #define __UNICODE__
  20.  
  21. #ifndef __TYPES__
  22. #include <Types.h>
  23. #endif
  24. #ifndef __TEXTCOMMON__
  25. #include <TextCommon.h>
  26. #endif
  27. #ifndef __MIXEDMODE__
  28. #include <MixedMode.h>
  29. #endif
  30.  
  31. #ifdef __cplusplus
  32. extern "C" {
  33. #endif
  34.  
  35. #if PRAGMA_IMPORT_SUPPORTED
  36. #pragma import on
  37. #endif
  38.  
  39. #if PRAGMA_ALIGN_SUPPORTED
  40. #pragma options align=mac68k
  41. #endif
  42.  
  43. #if 0
  44. /*
  45.  The following 7 typedefs are required for seeds until they get
  46.  moved to a future version of Types.[hp] in a future ETO release.
  47.  Also note that seeds should include a copy of the new TextCommon.[hp].
  48. */
  49. typedef UInt8 *BytePtr;
  50. typedef UInt32 ByteCount;
  51. typedef UInt32 ItemCount;
  52. typedef UInt32 OptionBits;
  53. typedef short RegionCode;
  54. typedef UInt32 ByteOffset;
  55. typedef const void *ConstLogicalAddress;
  56. /*
  57.  The following typedefs are required for seeds until they get
  58.  moved to a future version of Errors.[hp] in a future ETO release.
  59.  Unicode Converter Error Codes
  60. */
  61.  
  62. enum {
  63.     unicodeChecksumErr            = -8769,
  64.     unicodeNoTableErr            = -8768,
  65.     unicodeVariantErr            = -8767,
  66.     unicodeFallbacksErr            = -8766,
  67.     unicodePartConvertErr        = -8765,
  68.     unicodeBufErr                = -8764,
  69.     unicodeCharErr                = -8763,
  70.     unicodeElementErr            = -8762,
  71.     unicodeNotFoundErr            = -8761,
  72.     unicodeTableFormatErr        = -8760,
  73.     unicodeDirectionErr            = -8759,
  74.     unicodeContextualErr        = -8758,
  75.     unicodeTextEncodingDataErr    = -8757
  76. };
  77.  
  78. #endif
  79. #if FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE
  80. /* Unicode Converter Gestalt Constants: (****these belong in Gestalt.i****) */
  81.  
  82. enum {
  83.     gestaltUnicodeAttr            = 'unic',
  84.     gestaltUnicodeConverterPresent = 0,
  85.     gestaltUnicodeConverterMask    = 1L << gestaltUnicodeConverterPresent
  86. };
  87.  
  88. /* Basic types for Unicode characters and strings: */
  89. typedef UniChar *UniCharArrayPtr;
  90. typedef const UniChar *ConstUniCharArrayPtr;
  91. /* Unicode conversion contexts: */
  92. typedef struct OpaqueTextToUnicodeInfo* TextToUnicodeInfo;
  93. typedef struct OpaqueUnicodeToTextInfo* UnicodeToTextInfo;
  94. typedef struct OpaqueUnicodeToTextRunInfo* UnicodeToTextRunInfo;
  95. typedef const TextToUnicodeInfo ConstTextToUnicodeInfo;
  96. typedef const UnicodeToTextInfo ConstUnicodeToTextInfo;
  97. /* UnicodeMapVersion type & values */
  98. typedef SInt32 UnicodeMapVersion;
  99.  
  100. enum {
  101.     kUnicodeUseLatestMapping    = -1
  102. };
  103.  
  104. /* Types used in conversion */
  105. struct UnicodeMapping {
  106.     TextEncoding                     unicodeEncoding;
  107.     TextEncoding                     otherEncoding;
  108.     UnicodeMapVersion                 mappingVersion;
  109. };
  110. typedef struct UnicodeMapping UnicodeMapping;
  111.  
  112. typedef UnicodeMapping *UnicodeMappingPtr;
  113. typedef const UnicodeMapping *ConstUnicodeMappingPtr;
  114. struct TextEncodingRun {
  115.     ByteOffset                         offset;
  116.     TextEncoding                     textEncoding;
  117. };
  118. typedef struct TextEncodingRun TextEncodingRun;
  119.  
  120. /* Control flags for ConvertUnicodeToText and ConvertTextToUnicode */
  121.  
  122. enum {
  123.     kUnicodeUseFallbacksBit        = 0,
  124.     kUnicodeKeepInfoBit            = 1,
  125.     kUnicodeDirectionalityBits    = 2,
  126.     kUnicodeVerticalFormBit        = 4,
  127.     kUnicodeLooseMappingsBit    = 5,
  128.     kUnicodeStringUnterminatedBit = 6,
  129.     kUnicodeTextRunBit            = 7,
  130.     kUnicodeKeepSameEncodingBit    = 8
  131. };
  132.  
  133.  
  134. enum {
  135.     kUnicodeUseFallbacksMask    = 1L << kUnicodeUseFallbacksBit,
  136.     kUnicodeKeepInfoMask        = 1L << kUnicodeKeepInfoBit,
  137.     kUnicodeDirectionalityMask    = 3L << kUnicodeDirectionalityBits,
  138.     kUnicodeVerticalFormMask    = 1L << kUnicodeVerticalFormBit,
  139.     kUnicodeLooseMappingsMask    = 1L << kUnicodeLooseMappingsBit,
  140.     kUnicodeStringUnterminatedMask = 1L << kUnicodeStringUnterminatedBit,
  141.     kUnicodeTextRunMask            = 1L << kUnicodeTextRunBit,
  142.     kUnicodeKeepSameEncodingMask = 1L << kUnicodeKeepSameEncodingBit
  143. };
  144.  
  145. /* Values for kUnicodeDirectionality field */
  146.  
  147. enum {
  148.     kUnicodeDefaultDirection    = 0,
  149.     kUnicodeLeftToRight            = 1,
  150.     kUnicodeRightToLeft            = 2
  151. };
  152.  
  153. /* Control flags for TruncateForUnicodeToText: */
  154.  
  155. enum {
  156.     kUnicodeTextElementSafeBit    = 0,
  157.     kUnicodeRestartSafeBit        = 1
  158. };
  159.  
  160.  
  161. enum {
  162.     kUnicodeTextElementSafeMask    = 1L << kUnicodeTextElementSafeBit,
  163.     kUnicodeRestartSafeMask        = 1L << kUnicodeRestartSafeBit
  164. };
  165.  
  166. /* Filter bits for QueryUnicodeMappings filter field: */
  167.  
  168. enum {
  169.     kUnicodeMatchUnicodeBaseBit    = 0,
  170.     kUnicodeMatchUnicodeVariantBit = 1,
  171.     kUnicodeMatchUnicodeFormatBit = 2,
  172.     kUnicodeMatchOtherBaseBit    = 3,
  173.     kUnicodeMatchOtherVariantBit = 4,
  174.     kUnicodeMatchOtherFormatBit    = 5
  175. };
  176.  
  177.  
  178. enum {
  179.     kUnicodeMatchUnicodeBaseMask = 1L << kUnicodeMatchUnicodeBaseBit,
  180.     kUnicodeMatchUnicodeVariantMask = 1L << kUnicodeMatchUnicodeVariantBit,
  181.     kUnicodeMatchUnicodeFormatMask = 1L << kUnicodeMatchUnicodeFormatBit,
  182.     kUnicodeMatchOtherBaseMask    = 1L << kUnicodeMatchOtherBaseBit,
  183.     kUnicodeMatchOtherVariantMask = 1L << kUnicodeMatchOtherVariantBit,
  184.     kUnicodeMatchOtherFormatMask = 1L << kUnicodeMatchOtherFormatBit
  185. };
  186.  
  187. /* Control flags for SetFallbackUnicodeToText */
  188.  
  189. enum {
  190.     kUnicodeFallbackSequencingBits = 0
  191. };
  192.  
  193.  
  194. enum {
  195.     kUnicodeFallbackSequencingMask = 3L << kUnicodeFallbackSequencingBits
  196. };
  197.  
  198. /* values for kUnicodeFallbackSequencing field */
  199.  
  200. enum {
  201.     kUnicodeFallbackDefaultOnly    = 0L,
  202.     kUnicodeFallbackCustomOnly    = 1L,
  203.     kUnicodeFallbackDefaultFirst = 2L,
  204.     kUnicodeFallbackCustomFirst    = 3L
  205. };
  206.  
  207. #endif
  208. #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
  209. /* Caller-supplied entry point to a fallback handler */
  210. typedef pascal OSStatus (*UnicodeToTextFallbackProcPtr)(UniChar *srcUniStr, ByteCount srcUniStrLen, ByteCount *srcConvLen, BytePtr destStr, ByteCount destStrLen, ByteCount *destConvLen, LogicalAddress contextPtr, ConstUnicodeMappingPtr unicodeMappingPtr);
  211.  
  212. #if GENERATINGCFM
  213. typedef UniversalProcPtr UnicodeToTextFallbackUPP;
  214. #else
  215. typedef UnicodeToTextFallbackProcPtr UnicodeToTextFallbackUPP;
  216. #endif
  217.  
  218. enum {
  219.     uppUnicodeToTextFallbackProcInfo = kPascalStackBased
  220.          | RESULT_SIZE(SIZE_CODE(sizeof(OSStatus)))
  221.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(UniChar *)))
  222.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(ByteCount)))
  223.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(ByteCount *)))
  224.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(BytePtr)))
  225.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(ByteCount)))
  226.          | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(ByteCount *)))
  227.          | STACK_ROUTINE_PARAMETER(7, SIZE_CODE(sizeof(LogicalAddress)))
  228.          | STACK_ROUTINE_PARAMETER(8, SIZE_CODE(sizeof(ConstUnicodeMappingPtr)))
  229. };
  230.  
  231. #if GENERATINGCFM
  232. #define NewUnicodeToTextFallbackProc(userRoutine)        \
  233.         (UnicodeToTextFallbackUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppUnicodeToTextFallbackProcInfo, GetCurrentArchitecture())
  234. #else
  235. #define NewUnicodeToTextFallbackProc(userRoutine)        \
  236.         ((UnicodeToTextFallbackUPP) (userRoutine))
  237. #endif
  238.  
  239. #if GENERATINGCFM
  240. #define CallUnicodeToTextFallbackProc(userRoutine, srcUniStr, srcUniStrLen, srcConvLen, destStr, destStrLen, destConvLen, contextPtr, unicodeMappingPtr)        \
  241.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppUnicodeToTextFallbackProcInfo, (srcUniStr), (srcUniStrLen), (srcConvLen), (destStr), (destStrLen), (destConvLen), (contextPtr), (unicodeMappingPtr))
  242. #else
  243. #define CallUnicodeToTextFallbackProc(userRoutine, srcUniStr, srcUniStrLen, srcConvLen, destStr, destStrLen, destConvLen, contextPtr, unicodeMappingPtr)        \
  244.         (*(userRoutine))((srcUniStr), (srcUniStrLen), (srcConvLen), (destStr), (destStrLen), (destConvLen), (contextPtr), (unicodeMappingPtr))
  245. #endif
  246. #endif
  247. #if FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE
  248. typedef pascal OSStatus (*UnicodeToTextFallbackPreemptiveProcPtr)(UniChar *srcUniStr, ByteCount srcUniStrLen, ByteCount *srcConvLen, BytePtr destStr, ByteCount destStrLen, ByteCount *destConvLen, LogicalAddress contextPtr, ConstUnicodeMappingPtr unicodeMappingPtr);
  249. /* Function prototypes */
  250. /*
  251.  The following are in TextCommon.i:
  252.  CreateTextEncoding, GetTextEncodingBase, GetTextEncodingVariant, GetTextEncodingFormat
  253. */
  254. /* Create a new TextToUnicodeInfo structure. */
  255. extern pascal OSStatus CreateTextToUnicodeInfo(ConstUnicodeMappingPtr UnicodeMapping, TextToUnicodeInfo *textToUnicodeInfo)
  256.  THREEWORDINLINE(0x303C, 0x0401, 0xABCE);
  257.  
  258. /* Create a new UnicodeToTextInfo structure. */
  259. extern pascal OSStatus CreateUnicodeToTextInfo(ConstUnicodeMappingPtr UnicodeMapping, UnicodeToTextInfo *unicodeToTextInfo)
  260.  THREEWORDINLINE(0x303C, 0x040C, 0xABCE);
  261.  
  262. extern pascal OSStatus CreateUnicodeToTextRunInfo(ItemCount numberOfMappings, ConstUnicodeMappingPtr UnicodeMapping, UnicodeToTextRunInfo *unicodeToTextInfo)
  263.  THREEWORDINLINE(0x303C, 0x0612, 0xABCE);
  264.  
  265. /* Dispose of a TextToUnicodeInfo structure. */
  266. extern pascal OSStatus DisposeTextToUnicodeInfo(TextToUnicodeInfo *textToUnicodeInfo)
  267.  THREEWORDINLINE(0x303C, 0x0202, 0xABCE);
  268.  
  269. /* Dispose of a UnicodeToTextInfo structure. */
  270. extern pascal OSStatus DisposeUnicodeToTextInfo(UnicodeToTextInfo *unicodeToTextInfo)
  271.  THREEWORDINLINE(0x303C, 0x020D, 0xABCE);
  272.  
  273. extern pascal OSStatus DisposeUnicodeToTextRunInfo(UnicodeToTextRunInfo *unicodeToTextInfo)
  274.  THREEWORDINLINE(0x303C, 0x0213, 0xABCE);
  275.  
  276. /* Convert a string to Unicode. */
  277. extern pascal OSStatus ConvertTextToUnicode(TextToUnicodeInfo textToUnicodeInfo, ByteCount sourceLen, ConstLogicalAddress sourceStr, OptionBits controlFlags, ItemCount offsetCount, ByteOffset *offsetArray, ByteCount bufLen, ByteCount *sourceRead, ByteCount *unicodeLen, UniCharArrayPtr unicodeStr)
  278.  THREEWORDINLINE(0x303C, 0x1404, 0xABCE);
  279.  
  280. /* Convert a string from Unicode. */
  281. extern pascal OSStatus ConvertUnicodeToText(UnicodeToTextInfo unicodeToTextInfo, ByteCount unicodeLen, ConstUniCharArrayPtr unicodeStr, OptionBits controlFlags, ItemCount offsetCount, ByteOffset *offsetArray, ByteCount bufLen, ByteCount *inputRead, ByteCount *outputLen, LogicalAddress outputStr)
  282.  THREEWORDINLINE(0x303C, 0x1403, 0xABCE);
  283.  
  284. extern pascal OSStatus ConvertUnicodeToTextRun(UnicodeToTextRunInfo unicodeToTextInfo, ByteCount unicodeLen, ConstUniCharArrayPtr unicodeStr, OptionBits controlFlags, ItemCount offsetCount, ByteOffset *offsetArray, ByteCount bufLen, ByteCount *inputRead, ByteCount *outputLen, LogicalAddress outputStr, ItemCount encodingRunBufLen, ItemCount *encodingRunOutLen, TextEncodingRun *encodingRuns)
  285.  THREEWORDINLINE(0x303C, 0x1A14, 0xABCE);
  286.  
  287. /* Truncate a multibyte string at a safe place. */
  288. extern pascal OSStatus TruncateForTextToUnicode(ConstTextToUnicodeInfo textToUnicodeInfo, ByteCount sourceLen, ConstLogicalAddress sourceStr, ByteCount maxLen, ByteCount *truncatedLen)
  289.  THREEWORDINLINE(0x303C, 0x0A06, 0xABCE);
  290.  
  291. /* Truncate a Unicode string at a safe place. */
  292. extern pascal OSStatus TruncateForUnicodeToText(ConstUnicodeToTextInfo unicodeToTextInfo, ByteCount sourceLen, ConstUniCharArrayPtr sourceStr, OptionBits controlFlags, ByteCount maxLen, ByteCount *truncatedLen)
  293.  THREEWORDINLINE(0x303C, 0x0C05, 0xABCE);
  294.  
  295. /* Convert a Pascal string to Unicode. */
  296. extern pascal OSStatus ConvertPStringToUnicode(TextToUnicodeInfo textToUnicodeInfo, ConstStr255Param pascalStr, ByteCount bufLen, ByteCount *unicodeLen, UniCharArrayPtr unicodeStr)
  297.  THREEWORDINLINE(0x303C, 0x0A08, 0xABCE);
  298.  
  299. /* Convert a Unicode string to Pascal. */
  300. extern pascal OSStatus ConvertUnicodeToPString(UnicodeToTextInfo unicodeToTextInfo, ByteCount unicodeLen, ConstUniCharArrayPtr unicodeStr, Str255 pascalStr)
  301.  THREEWORDINLINE(0x303C, 0x0807, 0xABCE);
  302.  
  303. /* Get a list of the available conversion mappings. */
  304. extern pascal OSStatus QueryUnicodeMappings(OptionBits filter, ConstUnicodeMappingPtr findMapping, ItemCount maxCount, ItemCount *actualCount, UnicodeMappingPtr returnedMappings)
  305.  THREEWORDINLINE(0x303C, 0x0A09, 0xABCE);
  306.  
  307. /* Get the name of a TextEncodingBase table. */
  308. extern pascal OSStatus GetTextEncodingBaseName(ConstUnicodeMappingPtr UnicodeMapping, LangCode languageID, ByteCount bufLen, ByteCount *nameLength, UniCharArrayPtr mappingName)
  309.  THREEWORDINLINE(0x303C, 0x090A, 0xABCE);
  310.  
  311. /* Change the TextToUnicodeInfo to another mapping. */
  312. extern pascal OSStatus ChangeTextToUnicodeInfo(TextToUnicodeInfo textToUnicodeInfo, ConstUnicodeMappingPtr UnicodeMapping)
  313.  THREEWORDINLINE(0x303C, 0x040B, 0xABCE);
  314.  
  315. /* Change the UnicodeToTextInfo to another mapping. */
  316. extern pascal OSStatus ChangeUnicodeToTextInfo(UnicodeToTextInfo unicodeToTextInfo, ConstUnicodeMappingPtr UnicodeMapping)
  317.  THREEWORDINLINE(0x303C, 0x040E, 0xABCE);
  318.  
  319. #endif
  320. #if FOR_SYSTEM8_PREEMPTIVE
  321. /* Setup the fallback handler for converting Unicode To Text. */
  322. extern pascal OSStatus SetFallbackUnicodeToTextPreemptive(UnicodeToTextInfo unicodeToTextInfo, UnicodeToTextFallbackPreemptiveProcPtr fallback, OptionBits controlFlags, LogicalAddress infoPtr);
  323.  
  324. extern pascal OSStatus SetFallbackUnicodeToTextRunPreemptive(UnicodeToTextRunInfo unicodeToTextRunInfo, UnicodeToTextFallbackPreemptiveProcPtr fallback, OptionBits controlFlags, LogicalAddress infoPtr);
  325.  
  326. #endif
  327. #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
  328. /* Setup the fallback handler for converting Unicode To Text. */
  329. extern pascal OSStatus SetFallbackUnicodeToText(UnicodeToTextInfo unicodeToTextInfo, UnicodeToTextFallbackUPP fallback, OptionBits controlFlags, LogicalAddress infoPtr)
  330.  THREEWORDINLINE(0x303C, 0x080F, 0xABCE);
  331.  
  332. extern pascal OSStatus SetFallbackUnicodeToTextRun(UnicodeToTextRunInfo unicodeToTextRunInfo, UnicodeToTextFallbackUPP fallback, OptionBits controlFlags, LogicalAddress infoPtr)
  333.  THREEWORDINLINE(0x303C, 0x0819, 0xABCE);
  334.  
  335. /*
  336.  The following are in TextCommon.i:
  337.  UpgradeScriptInfoToTextEncoding, RevertTextEncodingToScriptInfo
  338. */
  339. #endif
  340.  
  341. #if PRAGMA_ALIGN_SUPPORTED
  342. #pragma options align=reset
  343. #endif
  344.  
  345. #if PRAGMA_IMPORT_SUPPORTED
  346. #pragma import off
  347. #endif
  348.  
  349. #ifdef __cplusplus
  350. }
  351. #endif
  352.  
  353. #endif /* __UNICODE__ */
  354.  
  355.